553B - Kyoya and Permutation - CodeForces Solution


binary search combinatorics constructive algorithms greedy implementation math *1900

Please click on ads to support us..

Python Code:

fib=[0,1,1]
for i in range(3,51):
    fib.append(fib[-1]+fib[-2])
for i in range(1,51):
    fib[i]+=fib[i-1]
n,m=map(int,input().split())
ans=[0]*n
left=m
last=0
for i in range(n):
    if ans[i]!=0:
        continue
    for j in range(i+1,n+1):
        size=n-j
        if size==1:
            perms=1
        else:
            perms = fib[size - 1] + 1
        if perms>=left:
            ans[i]=j
            break
        else:
            left-=perms
    nlast=ans[i]
    t=i+1
    while(t<n and ans[t-1]!=last+1):
        ans[t]=ans[t-1]-1
        t+=1
    last=nlast
print(*ans)


Comments

Submit
0 Comments
More Questions

Zoos
Build a graph
Almost correct bracket sequence
Count of integers
Differences of the permutations
Doctor's Secret
Back to School
I am Easy
Teddy and Tweety
Partitioning binary strings
Special sets
Smallest chosen word
Going to office
Color the boxes
Missing numbers
Maximum sum
13 Reasons Why
Friend's Relationship
Health of a person
Divisibility
A. Movement
Numbers in a matrix
Sequences
Split houses
Divisible
Three primes
Coprimes
Cost of balloons
One String No Trouble
Help Jarvis!